home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
AMICUS
/
AMICUS13.ADF
/
AmigaBasicProgs
/
LibDemos
/
ScreenPrint
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1986-08-05
|
5KB
|
212 lines
REM ScreenPrint
REM Carolyn Scheppner CBM 04/86
REM
REM Graphic screen dump to the printer
REM using exec library calls
REM Requires exec.bmap
REM Use Preferences to select options
REM such as GrayScale and Negative
REM *** Calling Program ***
REM Custom Screen, some graphics
w = 320: h = 200: d = 5
SCREEN 2,w,h,d,1
t$=" D = Draw P = Print Q = Quit "
WINDOW 2,t$,,15,2
PALETTE 0,1,1,1
PALETTE 1,0.2,0.4,0.8
GOSUB DrawLines:
MainLoop:
k$ = INKEY$
IF k$ = "d" THEN
GOSUB DrawLines:
ELSEIF k$ = "p" THEN
BorderFlag% = 0 'No borders printed
GOSUB ScreenDump
REM Time to read any error msgs
FOR de = 1 TO 5000: NEXT
ELSEIF k$ = "q" THEN
GOTO Quit:
END IF
GOTO MainLoop:
Quit:
WINDOW CLOSE 2
SCREEN CLOSE 2
END
DrawLines:
CLS
RANDOMIZE TIMER
FOR k = 1 TO 12
x1 = 80 + INT(RND(1) * (w - 160))
x2 = 80 + INT(RND(1) * (w - 160))
y1 = 40 + INT(RND(1) * (h - 100))
y2 = 40 + INT(RND(1) * (h - 100))
dx = 2 + INT(RND(1) * 3)
IF RND(1) < 0.5 THEN dx = -dx
dy = 2 + INT(RND(1) * 2)
IF RND(1) < 0.5 THEN dy = -dy
co = 1 + INT(RND(1) * 16)
nl = 12 + INT(RND(1) * 10)
FOR j = 1 TO nl
LINE (x1,y1)-(x2,y2),co
x1 = x1 + dx
x2 = x2 + dx
y1 = y1 + dy
y2 = y2 - dy
NEXT
NEXT
RETURN
END
ScreenDump:
REM If first call of this routine
REM declare the exec library functions
REM which return values
IF AlreadyDeclared = 0 THEN
DECLARE FUNCTION AllocSignal%() LIBRARY
DECLARE FUNCTION AllocMem&() LIBRARY
DECLARE FUNCTION FindTask&() LIBRARY
DECLARE FUNCTION DoIO&() LIBRARY
DECLARE FUNCTION OpenDevice& LIBRARY
AlreadyDeclared = 1
END IF
REM Get addresses of the structures
sWindow& = WINDOW(7)
sScreen& = PEEKL(sWindow& + 46)
sViewPort& = sScreen& + 44
sRastPort& = sScreen& + 84
sColorMap& = PEEKL(sViewPort& + 4)
REM Get Screen width, height, modes
maxWidth% = PEEKW(sScreen& + 12)
maxHeight% = PEEKW(sScreen& + 14)
viewModes% = PEEKW(sViewPort& + 32)
REM Set up parameters for dump command
command% = 11 'Printer command number
srcX% = 0 'Send whole screen
srcY% = 0
srcWidth% = maxWidth%
srcHeight% = maxHeight%
destRows& = 0 'Dump will compute
destCols& = 0
special% = &H84 'FullCol | Aspect
IF BorderFlag% = 0 THEN 'No Borders
srcX% = srcX% + 3
srcY% = srcY% + 11
srcWidth% = srcWidth% - 3 - 11
srcHeight% = srcHeight% - 11 - 3
END IF
LIBRARY "exec.library"
REM *** CreatePort ***
sigBit% = AllocSignal%(-1)
ClearPublic& = 65537
msgPort& = AllocMem&(40,ClearPublic&)
IF msgPort& = 0 THEN
PRINT "Can't allocate msgPort"
GOTO cleanup4
END IF
POKE(msgPort& + 8), 4 'Type=NT_MSGPORT
POKE(msgPort& + 9), 0 'Priority 0
portName$ = "MyPrtPort"+CHR$(0)
POKEL(msgPort& + 10), SADD(portName$)
POKE(msgPort& + 14), 0 'Flags
POKE(msgPort& + 15), sigBit%
sigTask& = FindTask&(0)
POKEL(msgPort& + 16), sigTask&
CALL AddPort(msgPort&) 'Add the port
REM *** CreatExtIO ***
ioRequest& = AllocMem&(64,ClearPublic&)
IF ioRequest& = 0 THEN
PRINT "Can't allocate ioRequest"
GOTO cleanup3
END IF
POKE(ioRequest& + 8),5 'Type=NT_MESSAGE
POKE(ioRequest& + 9),0 'Priority 0
POKEL(ioRequest& + 14), msgPort&
REM *** Open the Printer Device ***
devName$ = "printer.device"+CHR$(0)
pError& = OpenDevice&(SADD(devName$),0,ioRequest&,0)
IF pError& <> 0 THEN
PRINT "Can't open printer"
GOTO cleanup2
END IF
REM *** Dump the RastPort ***
POKEW(ioRequest& + 28), command%
POKEL(ioRequest& + 32), sRastPort&
POKEL(ioRequest& + 36), sColorMap&
POKEL(ioRequest& + 40), viewModes%
POKEW(ioRequest& + 44), srcX%
POKEW(ioRequest& + 46), srcY%
POKEW(ioRequest& + 48), srcWidth%
POKEW(ioRequest& + 50), srcHeight%
POKEL(ioRequest& + 52), destCols&
POKEL(ioRequest& + 56), destRows&
POKEW(ioRequest& + 60), special%
ioError& = DoIO&(ioRequest&)
IF ioError& <> 0 THEN
PRINT "DumpRPort error =" ioError&
GOTO cleanup1
END IF
cleanup1:
REM *** Close Printer Device ***
CALL CloseDevice(ioRequest&)
cleanup2:
REM *** DeleteExtIO ***
POKE(ioRequest& + 8), &Hff
POKEL(ioRequest& + 20), &Hffff
POKEL(ioRequest& + 24), &Hffff
CALL FreeMem(ioRequest&,64)
cleanup3:
REM *** DeletePort ***
CALL RemPort(msgPort&)
POKE(msgPort& + 8), &Hff
POKEL(msgPort& + 20), &Hffff
CALL FreeSignal(sigBit%)
CALL FreeMem(msgPort&,40)
cleanup4:
LIBRARY CLOSE
RETURN